Docker 简介
1 背景知识
2010年 dotCloud
公司成立于(旧金山),开发了 Docker
(码头工人) 的核心技术。
2013 年 Docker
开源,很快火爆全球。dotCloud
公司更是把公司名改成了 Docker Inc. 。
本文主要介绍 Docker
的特点、Docker
架构、适用场景。
2 Docker 概述
2.1 为什么要使用Docker ?
- Docker 原本是指将靠港后的商品进行装货和卸货的码头工人。
- 有经验的码头工人能够提高装卸效率,所以码头工人能够挣得更多得报酬。
- 而 Docker 就是经验丰富的集装箱,能够为客户节省时间和金钱。
2.1.1 Docker 出现之前
在Docker出现之前,部署软件到不同的环境所需的工作量巨大。用户必须应对那些复杂的管理工具。这些用户非常迫切的想拥有一个简单运维环境。
2.1.2 Docker 出现之后
使用Docker后,可以将配置工作从资源管理工作分离。部署将会变得简单。
2.2 Docker 能做什么?
Docker 是一个允许用户"在任何地方构建、分发以及运行应用“的平台。它在极短的时间内发展壮大,目前已经成为最经济的一种部署框架。
-
在Docker出现以前的问题
开发流水线通常使用不同的软件组合而成,如虚拟机、配置管理工具、不同的包管理系统。所有的这些工具都需要专业的工程师管理和运维,并且多数工具都有自己的独特的配置方式。 -
在Docker出现以后。
允许不同的工程师参与到这个过程。所有东西通过一个共同的流水线,在任何平台都可部署的软件。再也不需要维护一堆让人眼花缭乱的工具配置。如下图所示。
2.2.1 vagrant
Vagrant - 一款用于管理虚拟机的命令行实用软件,用 Ruby 语言开发而成。换言说,可以省去你使用虚拟机创建操作系统的所有操作,比如创建虚拟机,挂载镜像文件,一步步点击安装;使用 Vagrant ,这些都不需要做了,简简单单 2 行命令,快速创建属于你个人的系统。
2.2.2 Jenkins
Jenkins是一款开源 CI&CD 软件,用于自动化各种任务,包括构建、测试和部署软件。
Jenkins 支持各种运行方式,可通过系统包、Docker 或者通过一个独立的 Java 程序。
2.2.3 Chef
Chef Infra 是一种配置管理工具,旨在为您的整个基础架构带来自动化
2.3 Docker 与VMware虚拟机的对比
Container | VM | |
---|---|---|
启动速度 | 秒级 | 分钟级 |
运行性能 | 接近原生 | 5%左右损失 |
磁盘占用 | MB | GB |
数量 | 成百上千 | 一般几十台 |
隔离性 | 进程级 | 系统级(更彻底) |
操作系统 | 主要支持Linux(win/mac也可) | 几乎所有 |
3 Docker 优点
Docker 是一个允许用户“在任何地方构建、分发及运行任何应用”的平台。
3.1 替代虚拟机(VM)
Docker 可以在很多情况替代虚拟机。
- 用户只关心应用程序,而不是操作系统,那么可以使用
Docker
替代虚拟机。 - Docker 不仅启动速度比虚拟机块,迁移时也更为轻量。
- 由于它的分层系统,让其他人分享变得更简单。
- 命令行操作方式非常丰富,非常适合脚本化。
3.2 软件原型
- Docker 可以在几秒之内提供一个沙箱环境。
- 省去了配置一个虚拟机的麻烦。
3.3 打包软件
- 对于LInux 用户而言,Docker 镜像没有相关操作系统依赖。所以非常适合打包软件。
- 用户可以构建镜像,确保可以运行在任何的Linux 机器上。例如就像JAVA 一样,但是不需要JVM。
3.4 让微服务架构成为可能
- Docker 有助于将一个复杂系统分解成一系列可组成的部分。
- 可以使用更离散的方式思考其服务。
- 用户可以不影响全局的前提下重组软件,进行热插拔。
3.5 网络建模
可以在一台机器上启动成百上千的隔离容器。进行网络测试。
3.6 离线时启用全栈生产力
因为可以将系统的所有部分捆绑在Docker容器中,所以用户可以将其编排运行在笔记本电脑中移动办公,即便在离线时也没问题。
3.7 降低调试成本
Docker降低团队之间的软件交付复杂讨论成本是非常有效的。这类问题有:
- 失效的依赖库;
- 有问题的依赖库;
- 更新错误。
- 操作时的顺序错误。
- 无法重现错误。
而Docker 可以在一统一环境中进行调试,错误和环境的重现将会变得更简单。
3.8 清晰化软件依赖
通过结构化方式构建镜像,为迁移到不同的环境做好准备。
Docker强制用户从一个基本镜像明确记录了软件依赖包,这种记录的方式对于手工部署软件也有极大的帮助。
3.9 启用持续交付
- 持续交付(continuous delivery,CD)是一个基于流水线的软件交付模型。
- 这个流水线通过一个自动化(或半自动化)自动重新构建系统然后部署到生产环境中。
- 自动化构建方式相比传统软件构建方式更具有可重复性和可复制性。
4 Docker 整体架构
- Docker 守护进程是用户与Docker 交互的枢纽。
- Docker 守护进程控制用户机器上Docker 的访问权限。
- Docker守护进程通过HTTPD 协议接收请求。
- Docker守护进程还负责处理用户的镜像和容器。
- Docker Hub 是Docker 公司运营的一个公共注册中心。Docker守护进程将连接互联网获取镜像。
- 私有Docker 注册中心处于私有网络中,不能够被其他Docker 客户端所访问。